home *** CD-ROM | disk | FTP | other *** search
/ Aminet 32 / Aminet 32 (1999)(Schatztruhe)[!][Aug 1999].iso / Aminet / util / libs / graphics3d.lha / src / example / 3dlibdemo.e < prev    next >
Encoding:
Text File  |  1999-01-22  |  11.8 KB  |  601 lines

  1.  
  2. /*** Routin of test for graphics3d.library **/
  3. /** SEE 3dlib.h also **/
  4.  
  5. PROC main()
  6. DEF a3d:LONG
  7. DEF g:LONG
  8. DEF w:LONG
  9. DEF i:LONG
  10. DEF in:LONG
  11. DEF out:LONG
  12. DEF ob:LONG
  13. DEF np:LONG
  14. DEF d:LONG
  15. DEF s:LONG
  16. DEF esi:LONG
  17. DEF cb:LONG
  18. DEF tmap1:LONG
  19. DEF tmap2:LONG
  20. DEF tmap3:LONG
  21. DEF mode:LONG
  22. DEF c1:rgbtype
  23. DEF c2:rgbtype
  24. DEF vdist:LONG
  25. DEF gcolor:LONG
  26. DEF x0:LONG
  27. DEF y0:LONG
  28. DEF pjt:LONG
  29. DEF id:LONG
  30. DEF px:LONG
  31. DEF py:LONG
  32. DEF ay:LONG
  33. DEF ax:LONG
  34. DEF az:LONG
  35. DEF lx:LONG
  36. DEF ly:LONG
  37. DEF lz:LONG
  38. DEF il:LONG
  39. DEF vx:LONG
  40. DEF sx:LONG
  41. DEF ds:LONG
  42. DEF sl:LONG
  43. DEF fa:LONG
  44. DEF fd:LONG
  45. DEF ar:LONG
  46. DEF fm:LONG
  47. DEF sid:LONG
  48. DEF dw:LONG
  49. DEF dh:LONG
  50. DEF dp:LONG
  51. DEF xx:LONG
  52. DEF xxx:LONG
  53. DEF yy:LONG
  54. DEF yyy:LONG
  55. DEF oassi:LONG
  56. DEF dts:datestamp
  57. DEF dts1:datestamp
  58. DEF mvert:vtmap
  59. DEF time:LONG
  60. DEF scrr:PTR TO screenmoderequester
  61. DEF buf[100]:STRING
  62. DEF coll[10]:ARRAY OF LONG
  63. DEF zbuf:LONG
  64.  
  65. WriteF('INIZIALIZZAZIONE ...\n')
  66. sid:=$8000
  67. dw:=640
  68. dh:=240
  69.  
  70. aslbase:=NIL
  71. IF ((aslbase:=OpenLibrary('asl.library',38))<=NIL) THEN JUMP no_asl
  72.  
  73. scrr:=AllocAslRequest(ASL_SCREENMODEREQUEST,
  74.     [ASLSM_MAXDEPTH,8,
  75.      ASLSM_MINDEPTH,5,
  76.      ASLSM_MINWIDTH,640,
  77.      NIL])
  78. IF scrr=NIL THEN JUMP abort_b1 
  79.  
  80. IF AslRequest(scrr,[NIL])=FALSE THEN JUMP abort_b1
  81.  
  82. dw:=scrr.displaywidth
  83. dh:=scrr.displayheight
  84. sid:=scrr.displayid
  85.  
  86. dp:=5
  87.  
  88. xx:=550
  89. xxx:=350
  90. yy:=200
  91. yyy:=150
  92.  
  93. IF dw>640 
  94.     xx:=dw-70
  95.     xxx:=xx-200
  96. ENDIF
  97. IF dh>256
  98.     yy:=dh-86
  99.     yyy:=yy-50
  100. ENDIF
  101.  
  102. IF InStr(arg,'256',0)<>-1 THEN dp:=8
  103.  
  104. WriteF('Colour depth :\d\n',dp)
  105.  
  106. ar:=FIXV
  107. IF (dw>400)
  108.     IF dh<300 THEN ar:=ar/2
  109.     IF dh<400 THEN ar:=((dh+90)*FIXV)/dw
  110. ENDIF
  111. WriteF('aspect ratio =\d\n',ar)
  112.  
  113. no_asl:
  114.  
  115. WriteF('mode_id:$\h  width:\d height:\d\n',sid,dw,dh)
  116.  
  117. /*s:=OpenS(dw,dh,5,sid,'TEST 3DLIBS VERS. IN E')*/
  118. s:=OpenScreenTagList(NIL,
  119.     [SA_TITLE,'TEST 3DLIBS VERS. IN E',
  120.      SA_DEPTH,dp,
  121.      SA_TYPE,CUSTOMSCREEN,
  122.      SA_DISPLAYID,sid,
  123.      SA_WIDTH,dw,
  124.      SA_HEIGHT,dh,
  125.      NIL])
  126. IF s<=NIL THEN JUMP abort_b1 
  127.  
  128. g:=start_es(s)
  129. IF g<=NIL 
  130.     CloseScreen(s)
  131.     JUMP abort_b1
  132. ENDIF
  133.  
  134. w:=gad_w(g,20,20,xx,yy,'prova 3dlib',13)
  135.  
  136. WriteF('window=\d\n',w)
  137.  
  138. /** set mode cursor for object and initial light position **/
  139. fm:=0
  140. sl:=16
  141. il:=1*FIXV
  142. lx:=0
  143. ly:=0
  144. lz:=-sl*9
  145. /********************************/
  146.  
  147. /** set off z-buffering **/
  148. zbuf:=0
  149.  
  150. /** OPEN AND INITIALIZE A NEW 3D SPACE **/
  151. a3d:=display3d(w,0,0,xxx,yyy,300)
  152. IF a3d=NIL THEN JUMP abort_b
  153. /***************************************/
  154.  
  155. /** TEST FUNCTION INTEGER <-> FIXPOINT ***/
  156. i:=12
  157. WriteF('i2f=\d\n',Gd_int2fix({i},{out}))
  158. WriteF('f2i=\d\n',Gd_fix2int({out},{in}))
  159. WriteF('orig=\d int=\d fix=\d \n',i,in,out)
  160. /****************************************/
  161.  
  162. /** DEFINE TWO SFUMATE COLOURS, FOR SHADING AND ONE TRASPARENT COLOUR **/ 
  163. Gd_genpalette(a3d,[GP_RCOL,4,
  164.            GP_NCOL,4,
  165.            GP_NLIV,200,
  166.            GP_TRASP,0,
  167.            GP_COL,2,
  168.            END_T,NIL]:tag3d)
  169. IF dp=5 
  170.     c1.r:=0
  171.     c1.g:=0
  172.     c1.b:=0
  173.     c2.r:=15
  174.     c2.g:=2
  175.     c2.b:=0
  176. /* obsoleta */
  177. /*    Gd_touchpalette(a3d,16,30,c1,c2)*/
  178.     Gd_genpalette(a3d,
  179.          [GP_COL,0,
  180.            GP_HRGB,c2,
  181.           GP_LRGB,c1,
  182.           END_T,NIL]:tag3d)    
  183.     WriteF('touch1\n')
  184.     c1.r:=0
  185.     c1.g:=0
  186.     c1.b:=0
  187.     c2.r:=0 
  188.     c2.g:=2
  189.     c2.b:=15
  190. /* obsoleta */
  191. /*    Gd_touchpalette(a3d,1,15,c1,c2) */
  192.     Gd_genpalette(a3d,
  193.          [GP_COL,1,
  194.           GP_HRGB,c2,
  195.           GP_LRGB,c1,
  196.           END_T,NIL]:tag3d)    
  197.     WriteF('touch2\n')
  198. ELSE
  199.     c1.r:=0
  200.     c1.g:=0
  201.     c1.b:=0
  202.     c2.r:=255
  203.     c2.g:=28
  204.     c2.b:=0
  205. /* obsoleta */
  206. /*    Gd_touchpalette(a3d,31,60,c1,c2)*/
  207.     Gd_genpalette(a3d,
  208.          [GP_COL,0,
  209.           GP_HRGB,c2,
  210.           GP_LRGB,c1,
  211.           END_T,NIL]:tag3d)    
  212.     WriteF('touch1\n')
  213.     c1.r:=0
  214.     c1.g:=0
  215.     c1.b:=0
  216.     c2.r:=0 
  217.     c2.g:=28
  218.     c2.b:=255
  219. /* obsoleta */
  220. /*    Gd_touchpalette(a3d,1,30,c1,c2)*/
  221.     Gd_genpalette(a3d,
  222.          [GP_COL,1,
  223.           GP_HRGB,c2,
  224.           GP_LRGB,c1,
  225.           END_T,NIL]:tag3d)    
  226.     WriteF('touch2\n')
  227. ENDIF
  228. /**************************************************/
  229.  
  230. /** SET DEFAULT SOLID SHADING **/
  231. cb:=1
  232. mode:=SOLID
  233. /*******************************/
  234.  
  235. /** DEFINE A NEW ASPECT RATIO FOR SELECTED SCREEN **/
  236. Gd_aspectratio(a3d,ar)
  237. WriteF('change aspect ratio\n')
  238. /****************************************************/
  239.  
  240. /** DEFINE ALL TEXTURED MAPS **/
  241. tmap1:=Gd_newtmap(a3d,12,12,[1,0,1,0,1,0,1,0,1,0,1,0,
  242.                  0,0,0,0,0,0,0,0,0,0,0,0,
  243.                  0,1,0,1,0,1,0,1,0,1,0,1,
  244.                  0,0,0,0,0,0,0,0,0,0,0,0,
  245.                  1,0,1,0,1,0,1,0,1,0,1,0,
  246.                  1,1,1,1,1,1,1,1,1,1,1,1,
  247.                  0,1,0,1,0,1,0,1,0,1,0,1,
  248.                  1,1,1,1,1,1,1,1,1,1,1,1,
  249.                  1,0,0,0,0,0,0,0,0,0,0,1,
  250.                  1,0,0,0,0,2,2,0,0,0,0,1,
  251.                  1,0,0,0,0,0,0,0,0,0,0,1,
  252.                  1,1,1,1,1,1,1,1,1,1,1,1]:CHAR)
  253. WriteF('Tmap1=\d\n',tmap1)
  254. tmap2:=Gd_newtmap(a3d,6,6,[1,1,1,1,1,1,
  255.                0,1,0,0,0,0,
  256.                0,0,1,0,0,0,
  257.                0,0,0,1,0,0,
  258.                0,0,0,0,1,0,
  259.                1,1,1,1,1,1]:CHAR)
  260. WriteF('Tmap2=\d\n',tmap2)
  261. tmap3:=Gd_newtmapf(a3d,'prova.iff')
  262. WriteF('Tmap3=\d\n',tmap3)
  263.  
  264. /*******************************/
  265. esi:=0
  266. oassi:=0
  267. /** CREATE AND POSITION OF #1 OBJECT *****/
  268. WriteF('Leggo oggetto assi ...\n')
  269. /*
  270. i:=plgloadobject(a3d,'assi.plg',1*FIXV)
  271. */
  272. oassi:=Gd_loadobject(a3d,'assi.3dgfo',1*FIXV)
  273. WriteF('result plgloadobject assi :\d\n',oassi)
  274. IF oassi<>0 THEN Gd_positionobject(a3d,0,0,0)
  275. esi:=esi+oassi
  276.  
  277. WriteF('Leggo #1 oggetto...\n')
  278. /*
  279. i:=plgloadobject(a3d,'pyramid.plg',1*FIXV)
  280. i:=Gd_loadobject(a3d,'pyramid.3dgfo',1*FIXV)
  281. WriteF('result plgloadobject #1 :\d\n',i)
  282. IF i<>0 THEN Gd_positionobject(a3d,500*FIXV,0,560*FIXV)
  283. esi:=esi+i
  284. */
  285.  
  286. /** CREATE AND POSITION OF 2# OBJECT *****/
  287. WriteF('Leggo #2 oggetto...\n')
  288. /*
  289. i:=plgloadobject(a3d,'sfera.plg',2*FIXV)
  290. */
  291. i:=Gd_loadobject(a3d,'sfera.3dgfo',2*FIXV)
  292. WriteF('result plgloadobject #2 :\d\n',i)
  293. IF i<>0 THEN Gd_positionobject(a3d,200*FIXV,0,800*FIXV)
  294. esi:=esi+i
  295.  
  296. Gd_modobj(a3d,[MO_VMODE,FLAT,END_T,0]:tag3d)
  297.  
  298. /** CREATE AND POSITION OF #3 OBJECT *****/
  299. WriteF('Leggo #3 oggetto...\n')
  300. /*
  301. i:=plgloadobject(a3d,'cube.plg',1*FIXV)
  302. */
  303. i:=Gd_loadobject(a3d,'cube.3dgfo',1*FIXV)
  304. WriteF('result plgloadobject #3 :\d\n',i)
  305. IF i<>0 THEN Gd_positionobject(a3d,-50*FIXV,0,0)
  306. esi:=esi+i
  307. /** PLACE THE TEXTURE MAPS ON THIS OBJECT **/
  308. IF i<>0
  309.     mvert.x1:=0
  310.     mvert.y1:=0
  311.     mvert.x2:=5
  312.     mvert.y2:=0
  313.     mvert.x3:=5
  314.     mvert.y3:=5
  315.     mvert.x4:=0
  316.     mvert.y4:=5    
  317.     /* #2 texture map on polygon #5 ,#2 texture map on polygon #0 and 
  318.        #3 texture map on polygon #1 */
  319.     Gd_modpoly(a3d,
  320.     [MP_POLY,5,        
  321.      MP_TMAP,tmap2,
  322.      MP_VTMAP,mvert,
  323.      MP_POLY,0,
  324.      MP_TMAP,tmap2,
  325.      MP_VTMAP,mvert,
  326.      MP_POLY,1,
  327.      MP_TMAP,tmap3,
  328.      MP_VTAUTO,0,
  329.      MP_POLY,2,
  330.      MP_TMAP,tmap3,
  331.      MP_VTAUTO,0,
  332.             END_T,0]:tag3d)
  333. ENDIF
  334.  
  335. /** CREATE AND POSITION OF #4 OBJECT *****/
  336. WriteF('Leggo #4 oggetto...\n')
  337. /*
  338. i:=plgloadobject(a3d,'pyramid.plg',2*FIXV)
  339. */
  340. i:=Gd_loadobject(a3d,'pyramid.3dgfo',2*FIXV)
  341. WriteF('result plgloadobject #4 :\d\n',i)
  342. IF i<>0 THEN i:=Gd_positionobject(a3d,400*FIXV,0,750*FIXV)
  343. /** PLACE THE TEXTURE MAPS ON THIS OBJECT **/
  344. IF i<>0
  345.     mvert.x1:=0
  346.     mvert.y1:=0
  347.     mvert.x2:=11
  348.     mvert.y2:=0
  349.     mvert.x3:=11
  350.     mvert.y3:=11
  351.     mvert.x4:=0
  352.     mvert.y4:=11
  353.     Gd_modpoly(a3d,[MP_POLY,4,MP_TMAP,tmap1,MP_VTMAP,mvert,END_T,0]:tag3d)
  354. ENDIF
  355. /*****************************************/
  356. esi:=esi+i
  357. IF esi=NIL THEN JUMP abort_b
  358.  
  359. Gd_frustum(a3d,-1005,16000)           /* CHANGE SOME SETTINGS */
  360. Gd_clipmode(a3d,ZPLANE)             /* EITHER #FRUSTUM OR #ZPLANE */
  361. Gd_createlightsource(a3d,lx,ly,lz)  /* PLACE THE LIGHT SOURCES */
  362. Gd_ambientlight(a3d,il)             /* SET THE INITIAL LIGHT INTENSITY */ 
  363. Gd_positioncamera(a3d,0,0,-1000*FIXV)
  364.             /* CAMERA AT SOME HEIGHT OFF THE GROUND */
  365.  
  366. /** SET OFF ALL SCENE 3D PARAMETERS **/
  367. /** CHANGE COLOUR OF VISUALIZATION BOX **/
  368. gcolor:=3
  369. /** CHANGE OBSERVER DISTANCE **/
  370. vdist:=500
  371. /** CHANGE BOX ORIGIN **/
  372. x0:=10
  373. y0:=15
  374. /** CHANGE TYPE OF PROJECTION (experimental) **/
  375. pjt:=PARAL_P
  376.  
  377. WriteF('cp. esi=\d\n',Gd_cascene(a3d,[ CS_GCOLOR,gcolor,
  378.     CS_VDIST,vdist,
  379.     CS_NPX0,x0,
  380.     CS_NPY0,y0,
  381.     END_T,NIL]:tag3d))
  382. /*****************************************/
  383.  
  384. /** DISPLAY THE BORDERS OF VISUALIZATION BOX **/
  385. Box(x0-1,y0-1,350+x0+1,150+y0+1,1)
  386.  
  387. DateStamp(dts)
  388. /*** RECALC THE VIEWING ***/
  389. Gd_newview(a3d)
  390. /*** REDRAW THE VIEWING ***/
  391. Gd_paintframe(a3d)
  392. /*** VISUALIZING THE VIEWING ***/ 
  393. Gd_switch_rp(a3d)
  394. DateStamp(dts1)
  395.  
  396. mouse_ON(g)
  397.  
  398. IF fm=0 THEN StringF(buf,'objects')
  399. IF fm=1 THEN StringF(buf,'lights ')
  400. TextF(380,60,'c_mode :\s',buf)
  401. TextF(380,70,'x=\d y=\d z=\d ',lx,ly,lz)
  402. TextF(380,80,'light int.:\d ',il)
  403.  
  404. ay:=0
  405. ax:=0
  406. az:=0
  407. vx:=0
  408. sx:=FIXV
  409. ds:=Shr(FIXV,4)
  410. d:=0
  411. ob:=-1
  412. time:=0
  413. WHILE (pause(g)=NIL)
  414.  
  415.     fa:=0
  416.     d:=0
  417.     i:=inkey(g)
  418.     SELECT i
  419.         /** switch on-off z-buffering **/
  420.         CASE "z"
  421.             zbuf:=zbuf+1
  422.             IF zbuf>1 THEN zbuf:=0
  423.             Gd_cascene(a3d,[CS_ZBUF,zbuf,END_T,NIL]:tag3d)            
  424.         /** switch object-light mode cursor **/
  425.         CASE "l"
  426.             fm:=fm+1
  427.             IF fm>1 THEN fm:=0
  428.             fa:=1
  429.         /** SWITCH ON-OFF POLIGONS BORDER ***/ 
  430.         CASE "b"
  431.             IF cb=1 THEN cb:=-1 ELSE cb:=1
  432.             Gd_changeviewmode(a3d,mode,cb)
  433.         /** SET WIRE FRAME SHADING ***/
  434.         CASE "w"
  435.             mode:=WIREF    
  436.             Gd_changeviewmode(a3d,mode,cb)
  437.         /** SET SOLID SHADING **/
  438.         CASE "s"
  439.             mode:=SOLID    
  440.             Gd_changeviewmode(a3d,mode,cb)
  441.         /** SET FLAT SHADING **/
  442.         CASE "f"
  443.             mode:=FLAT     
  444.             Gd_changeviewmode(a3d,mode,cb)
  445.         /** SET GORAUD SHADING **/
  446.         CASE "g"
  447.             mode:=GORAUD
  448.             Gd_changeviewmode(a3d,mode,cb)
  449.         /** SET TEXTURE MAP ON **/
  450.         CASE "t"
  451.             mode:=mode+TMAP
  452.             Gd_changeviewmode(a3d,mode,cb)
  453.         CASE CDE
  454.             IF fm=NIL
  455.                 ay:=ay+2
  456.             ELSE
  457.                 lx:=lx-sl
  458.             ENDIF
  459.             fa:=1
  460.         CASE CSI
  461.             IF fm=NIL
  462.                 ay:=ay-2
  463.             ELSE
  464.                 lx:=lx+sl
  465.             ENDIF
  466.             fa:=1
  467.         CASE CSU
  468.             IF fm=NIL
  469.                 ax:=ax+2
  470.             ELSE
  471.                 ly:=ly+sl
  472.             ENDIF
  473.             fa:=1
  474.         CASE CGIU
  475.             IF fm=NIL
  476.                 ax:=ax-2
  477.             ELSE
  478.                 ly:=ly-sl
  479.             ENDIF
  480.             fa:=1
  481.         CASE "7"
  482.             az:=az+2
  483.             fa:=1
  484.         CASE "1"
  485.             az:=az-2
  486.             fa:=1    
  487.         CASE "i"
  488.             IF fm=NIL
  489.                 sx:=sx+ds
  490.             ELSE
  491.                 il:=il+(FIXV/2)
  492.                 IF il>(14*FIXV) THEN il:=14*FIXV
  493.             ENDIF
  494.             fa:=1
  495.         CASE "o"
  496.             IF fm=NIL
  497.                 sx:=sx-ds
  498.                 IF sx<=0 THEN sx:=sx+ds ELSE fa:=1
  499.             ELSE
  500.                 il:=il-(FIXV/2)
  501.                 IF il<0 THEN il:=0
  502.                 fa:=1
  503.             ENDIF
  504.         CASE "8"
  505.         /** MOVE THE VIEWER TO THE SCREEN ***/
  506.             IF fm=0    
  507.                 d:=40*FIXV
  508.                 Gd_moveforward(a3d,d)
  509.             ELSE
  510.                 lz:=lz+sl
  511.                 fa:=1
  512.             ENDIF
  513.         CASE "2"
  514.         /** MOVE THE VIEWER FROM THE SCREEN ***/
  515.             IF fm=0
  516.                 d:=-40*FIXV        
  517.                 Gd_moveforward(a3d,d)
  518.             ELSE
  519.                 lz:=lz-sl
  520.                 fa:=1
  521.             ENDIF
  522.         CASE "4"
  523.         /** CHANGE THE ANGLE OF VIEW TO LEFT **/
  524.             vx:=vx+1
  525.             Gd_viewangle(a3d,0,vx,0)
  526.         CASE "6"
  527.         /** CHANGE THE ANGLE OF VIEW TO RIGHT **/
  528.             vx:=vx-1
  529.             Gd_viewangle(a3d,0,vx,0)
  530.     ENDSELECT    
  531.  
  532.     np:=mouse(g)
  533.     IF np=1
  534.         px:=mouseX(g)
  535.         py:=mouseY(g)
  536.         TextF(380,20,'oggetto id#   ',ob)
  537.         TextF(380,30,'poligono n#   ',np)
  538.         TextF(380,40,'Ax=\d Ay=\d sx=\d  ',ax,ay,sx)
  539.         TextF(380,50,'\d X=\d y=\d ',mode,px,py)
  540.     /** TEST IF AT POINT(px,py) IS PRESENT A POLIGON AND AN OBJECT **/ 
  541.         ob:=Gd_pickobj(a3d,{np},px,py)
  542.         IF (ob>NIL) AND (ob<>oassi)
  543.             TextF(380,20,'oggetto id#\d ',ob)
  544.             TextF(380,30,'poligono n#\d ',np)
  545.         ENDIF                    
  546.     ENDIF
  547.         
  548.     IF fa 
  549.         IF fm=0 THEN StringF(buf,'objects')
  550.         IF fm=1 THEN StringF(buf,'lights ')
  551.         TextF(380,60,'c_mode :\s',buf)
  552.         IF (fm=0) AND (ob>0)
  553.     /** SET THE TRASFORMATION TO THE EVENTUALLY PICKED OBJECT **/
  554.             TextF(380,40,'Ax=\d Ay=\d Az=\d sx=\d  ',ax,ay,az,sx)
  555.             Gd_setobj(a3d,ob)
  556.             Gd_rotateobject(a3d,ax,ay,az)
  557.             Gd_scaleobject(a3d,sx,sx,sx)
  558.         ENDIF
  559.         IF fm 
  560.     /** CHANGE LIGHT POSITION **/
  561.             TextF(380,70,'x=\d y=\d z=\d ',lx,ly,lz)
  562.             Gd_createlightsource(a3d,lx,ly,lz)
  563.     /** CHANGE LIGHT INTENSITY **/
  564.             TextF(380,80,'light int.:\d ',il)
  565.             Gd_ambientlight(a3d,il)
  566.         ENDIF
  567.     ENDIF    
  568.     IF i>=NIL 
  569.         DateStamp(dts)
  570.     /*** RECALC THE VIEWING ***/
  571.         Gd_newview(a3d)
  572.     /*** REDRAW THE VIEWING ***/
  573. /*** funzione maggiormente bisognosa di ottimizzazione ***/
  574.         Gd_paintframe(a3d)
  575.     /*** VISUALIZING THE VIEWING ***/ 
  576.         Gd_switch_rp(a3d)
  577.         DateStamp(dts1)
  578.         time:=(TICKS_PER_SECOND*60*dts1.minute)-(TICKS_PER_SECOND*60*dts.minute)+
  579.              dts1.tick-dts.tick
  580.     ENDIF
  581.     TextF(380,90,'ticks:\d  ',time)
  582.     coll[0]:=0
  583.     coll[1]:=0
  584.     coll[2]:=0
  585.     coll[3]:=0
  586.     TextF(380,100,'ZBuff:\d Coll:\d',zbuf,Gd_colldetect(a3d,5,coll))
  587.     TextF(380,110,'\d \d \d \d',coll[0],coll[1],coll[2],coll[3])    
  588. ENDWHILE
  589.  
  590. WriteF('termino.. \n')
  591. /** CLOSE AND DESTROY ALL DEFINITION CREATE BY display3d **/
  592. abort_b:
  593. close_display3d(a3d)
  594. gad_cw(g)
  595. end(g,1)
  596. CloseScreen(s)
  597. abort_b1:
  598. IF aslbase<>NIL THEN CloseLibrary(aslbase)
  599.  
  600. ENDPROC    
  601.